import os

# 定义检测特征图的大小
feature_map_sizes = [(80, 80), (40, 40), (20, 20)]

# 定义输入图片的尺寸
input_width, input_height = 640, 640

# 统计数量的变量
detection_counts = [0, 0, 0]

# 指定包含txt文件的文件夹路径
folder_path = 'E:\Dataset\Resizedata2\labels/train'

# 获取文件夹中的所有txt文件
txt_files = [f for f in os.listdir(folder_path) if f.endswith('.txt')]

# 遍历txt文件
for txt_file in txt_files:
    file_path = os.path.join(folder_path, txt_file)

    # 读取标签文件
    with open(file_path, 'r') as file:
        lines = file.readlines()

    # 解析标签文件
    for line in lines:
        line = line.strip().split(' ')
        # 获取归一化坐标和类别标签
        x, y, width, height, class_label = map(float, line[1:])
        # 计算实际边界框的坐标
        x = x * input_width
        y = y * input_height
        width = width * input_width
        height = height * input_height

        # 根据边界框的大小确定检测头
        for i, (map_width, map_height) in enumerate(feature_map_sizes):
            min_size = 2 ** (i + 3)  # 计算对应检测特征图的最小边界框大小
            if width > min_size and height > min_size:
                detection_counts[i] += 1
                break

# 打印检测头的数量统计结果
for i, count in enumerate(detection_counts):
    print(f"检测头P{i + 3}/{2 ** (i + 3)}检测到的目标数量：{count}")